﻿#include <iostream>
#include<cmath>
using namespace std;
bool isprime(int n)
{
	int j = 0;
	if (n < 2) {
		return false;
	}
	else
	{
		for (j = 2; j <= sqrt(n); j++)
		{
			if (n % j == 0)
				return false;
		}
		return true;
	}
}
int main()
{
	int n = 0;
	int count = 0;
	cin >> n;
	int i = 0;
	for (int i = 0; i <= n; i++)
	{
		if (isprime(i))
		{
			count++;
		}
	}
	cout << count << endl;
	return 0;
}
//bool check(float wen, int flag)
//{
//	return (wen >= 37.5 && flag);
//}
//int main()
//{
//	string name;
//	float wen;
//	int flag = 0;
//	int n = 0;
//	int t = 0;
//	cin >> n;
//	while (n--)
//	{
//		cin >> name >> wen >> flag;
//		if (check(wen, flag))
//		{
//			cout << name << endl;
//			t++;
//		}
//	}
//	cout << t << endl;
//	return 0;
//}
//bool fun(int n)
//{
//	int j = 0;
//	int sum = 0;
//	for (j = 1; j < n; j++)
//	{
//		if (n % j == 0)
//		{
//			sum += j;
//		}
//	}
//	return sum == n;
//}
//int main()
//{
//	int n = 0;
//	cin >> n;
//	int i = 0;
//	for (i = 2; i <= n; i++)
//	{
//		if (fun(i))
//		{
//			cout << i << endl;
//		}
//	}
//	return 0;
//}
//int main()
//{
//	int n,m;
//	cin >> n >> m;
//	double ret = 0;
//	for (int i = 0; i < n; i++)
//	{
//		int sum = 0;
//		int Max = 0;
//		int Min = 10;
//		for (int j = 0; j < m; j++)
//		{
//			int c;
//			cin >> c;
//			sum += c;
//			Max = max(Max, c);
//			Min = min(Min, c);
//		}
//		double tmp = (sum - Max - Min)*1.0 / (m - 2);
//		ret = max(tmp, ret);
//	}
//	printf("%0.2lf\n", ret);
//	return 0;
//}
//int main()
//{
//	int n;
//	int t;
//	cin >> n;
//	cin >> t;
//	int maxNum = t, minNum = t;
//	for (int i = 0; i < n; i++)
//	{
//		cin >> t;
//		maxNum = max(maxNum, t);
//		minNum = min(minNum, t);
//	}
//	cout << maxNum - minNum << endl;
//	return 0;
//}
//int Max(int x, int y, int z)
//{
//	int m = max(x, y);
//	return max(m, z);
//}
//int main()
//{
//	int a, b, c;
//	cin >> a >> b >> c;
//	double ret = Max(a, b, c) * 1.0 / (Max(a + b, b, c) * Max(a, b, b + c));
//	printf("%.3lf\n", ret);
//	return 0;
//}
//#include <iostream>
//#include <algorithm>
//#include <string>
//using namespace std;
//bool compareLength(const string& a, const string& b)
//{
//	return a.size() < b.size(); //这⾥必须给⼀个判断⼩于的标准
//
//}
//int main()
//{
//	string str1 = "apple";
//	string str2 = "banana";
//	string min_str = min(str1, str2, compareLength);
//	cout << "⻓度更⻓的字符串是：" << min_str << endl;
//	return 0;
//}
//#include <iostream>
//#include <algorithm>
//#include <string>
//using namespace std;
//bool compareLength(const string& a, const string& b)
//{
//	return a.size() < b.size(); //这⾥必须给⼀个判断⼩于的标准
//
//}
//int main()
//{
//	string str1 = "apple";
//	string str2 = "banana";
//	//string max_str = max(str1, str2);按照默认的方式：字典序进行比较
//	string max_str = max(str1, str2, compareLength);
//	cout << "长度更长的字符串是" << max_str << endl;
//	return 0;
//}
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<iostream>
//using namespace std;
//
//int main()
//{
//	int x = 10;
//	int y = 20;
//	int m = max(x, y);
//	cout << "较大是: " << m << endl;
//	return 0;
//}
//double Max(int a, int b, int c)
//{
//	int m = a > b ? a : b;
//	return m > c ? m : c;
//}
//int main()
//{
//	int a, b, c;
//	cin >> a >> b >> c;
//	printf("%.3f\n",Max(a, b, c)/(Max(a+b,b,c)*Max(a,b,b+c)));
//	return 0;
//}
//const T& max(const T& a, const T& b, Compare comp); //⾃定义⽐较器

//int cal(int a, char c, int b)
//{
//	switch (c)
//	{
//	case '+':
//		return a + b;
//	case '-':
//		return a - b;
//	case '*':
//		return a * b;
//	case '/':
//		return a / b;
//	case '%':
//		return a % b;
//	}
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	char c = 0;
//	cin >> a >> c >> b;
//	int ret = cal(a, c, b);
//	cout << ret << endl;
//	return 0;
//}